const pug = require('pug')
  , fs = require('fs')
  , markdown = require('marked')
  , moment = require('moment')
;

/**
 * 时间格式化工具
 * @param pattern 格式，默认 YYYY-MM-DD HH:mm:ss
 * @returns {string} 返回格式后的时间
 */
format = function (pattern) {
  pattern = pattern ? pattern : "YYYY-MM-DD HH:mm:ss";
  return moment(new Date()).format(pattern)
};

// 标题，读取文件路径， 写入文件路径
const args = process.argv.splice(2);
console.log(args);

// 编译模板
const compiledFunction = pug.compileFile('./views/index.pug');

render = function (title, content) {
  return compiledFunction({
    title: title
    , content: content
    , time: format('YYYY/MM/DD')
  });
};

/**
 * 写入渲染之后的html文件
 * @param title 标题
 * @param result 渲染结果
 * @param wPath 写入文件路径
 */
write = function (title, result, wPath) {
  fs.writeFile(wPath, result, function (err) {
    if (err) {
      return console.error(err);
    }
    console.log("数据写入成功！");
    console.log("--------我是分割线-------------")
    console.log("读取写入的数据！");
    fs.readFile(wPath, function (err, data) {
      if (err) {
        return console.error(err);
      }
      console.log("异步读取文件数据: " + data.toString());
    });
  });
};

/**
 * markdown to html
 * @param title 标题  如 gitbook 技术文档
 * @param rPath 读取文件路径 如： './markdown/1/gitbook.md'
 * @param wPath 写入文件路径 如： './markdown/1/gitbook.html'
 */
markdownToHtml = function (title, rPath, wPath) {
  if (!title || !rPath) {
    console.error("读取失败");
    return;
  }
  if (!wPath) {
    const index = rPath.lastIndexOf('.');
    wPath = rPath.substr(0, index) + ".html";
  }
  console.info("标题：" + title);
  console.info("读取文件路径： " + rPath);
  console.info("写入文件路径： " + wPath);

  // 读取markdown
  fs.readFile(rPath, function (err, data) {
    if (err) {
      console.log("文件读取错误：" + path)
    } else {
      // console.log(data.toString('utf8'));
      const html = markdown(data.toString('utf8'));
      const result = render(title, html);
      write(title, result, wPath);
    }
  });
};

markdownToHtml(args[0], args[1], args[2]);